home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / UTILITY / SETTIME.M < prev    next >
Encoding:
Text File  |  1990-07-16  |  2.9 KB  |  98 lines

  1. MODULE SetTime;
  2.  
  3. (*
  4.  * Dies Programm ist nützlich für jeden Atari ohne batteriegepufferte Uhr.
  5.  * Es muß compiliert und gelinkt (nur M2Init.MOD aktivieren, vollst. opti-
  6.  * mieren) werden und in den AUTO-Ordner der Bootdisk oder Harddisk kopiert
  7.  * werden. Beim Kaltstart des Rechners fragt das Programm dann nach der
  8.  * Eingabe von Datum und Zeit. Wird später ein Warmstart (Neustart durch
  9.  * Reset-Knopf) ausgelöst, wird die Zeit automatisch neu gesetzt, ohne daß
  10.  * sie erneut eingegeben werden muß (das geht, weil es zwei Uhren im Rechner
  11.  * gibt und die eine davon nicht gelöscht wird).
  12.  *)
  13.  
  14. (*$R-,S-  keine Fehlerprüfungen - sind unnötig *)
  15.  
  16. FROM SYSTEM IMPORT BYTE, ADDRESS, WORD;
  17.  
  18. FROM Terminal IMPORT Write, Read, WriteLn, WriteString, ReadString, GotoXY;
  19.  
  20. FROM Clock IMPORT PackDate, Time, Date, CurrentTime, CurrentDate,
  21.         UnpackDate, GetDateAndTime, SetDateAndTime;
  22.  
  23. FROM TimeConvert IMPORT TimeToText, DateToText, TextToTime, TextToDate;
  24.  
  25. FROM Strings IMPORT Empty;
  26.  
  27. FROM SysUtil1 IMPORT SuperPeek;
  28.  
  29.  
  30. TYPE PtrTOSHead = POINTER TO TOSHead;
  31.      TOSHead    = RECORD
  32.                     jmp_instr: WORD;
  33.                     version: CARDINAL;
  34.                     os_init1: ADDRESS;
  35.                     os_start: ADDRESS;
  36.                     unknown: ADDRESS;
  37.                     os_init2: ADDRESS;
  38.                     res_valid: POINTER TO LONGCARD;
  39.                     make_day: BYTE;
  40.                     make_month: BYTE;
  41.                     make_year: CARDINAL;
  42.                     packed_time: CARDINAL;
  43.                     packed_date: CARDINAL;
  44.                   END;
  45.  
  46. VAR selection: CHAR;
  47.     s: ARRAY [0..31] OF CHAR;
  48.     ok: BOOLEAN;
  49.     th: PtrTOSHead;
  50.     t: Time;
  51.     d: Date;
  52.  
  53. PROCEDURE enter;
  54.   BEGIN
  55.     LOOP
  56.       WriteLn;
  57.       WriteString ('Datum? ');
  58.       ReadString (s);
  59.       IF Empty (s) THEN RETURN END;
  60.       TextToDate (s,0,d,ok);
  61.       IF ok THEN
  62.         LOOP
  63.           WriteLn;
  64.           WriteString ('Zeit?  ');
  65.           ReadString (s);
  66.           IF Empty (s) THEN EXIT END;
  67.           TextToTime (s,t,ok);
  68.           IF ok THEN
  69.             SetDateAndTime (d,t);
  70.             RETURN
  71.           END
  72.         END;
  73.       END
  74.     END
  75.   END enter;
  76.  
  77. BEGIN
  78.   WriteLn;
  79.   WriteString ('SetTime von Thomas Tempelmann in Megamax Modula-2');
  80.   GetDateAndTime (d,t);  (* Kbd-Uhr auslesen *)
  81.   SetDateAndTime (d,t);  (* Und GEMDOS-Uhr setzen *)
  82.   SuperPeek ($4F2L, th);  (* Zeiger auf TOS-Header ermitteln *)
  83.   IF (CARDINAL (d.day) = 0)
  84.   OR (CARDINAL (d.month) = 0)
  85.   OR (PackDate (d) <= th^.packed_date) THEN
  86.     (* Uhr noch nicht gestellt -> Eingeben lassen *)
  87.     enter;
  88.   END;
  89.   (* Zuletzt eingestellte Zeit anzeigen *)
  90.   WriteLn;
  91.   DateToText (CurrentDate (), '', s);
  92.   WriteString (s);
  93.   WriteString (' / ');
  94.   TimeToText (CurrentTime (), '', s);
  95.   WriteString (s);
  96.   WriteLn;
  97. END SetTime.
  98.